package com.sg.dto.integration.app;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @desc SetConstructionTaskDto
 * @使用场景
 */
@Data
public class SetConstructionTaskDto extends BaseDto implements Serializable {

    /**
     * 目标分类ID
     */
    @ApiModelProperty("目标分类ID")
    private String targetCategoryId;

    /**
     * 归属父级目标分类ID
     */
    @ApiModelProperty("归属父级目标分类ID")
    private String parentTtargetCategoryId;

    /**
     * 目标分类标识
     */
    @ApiModelProperty("目标分类标识")
    private String targetCategoryCode;

    /**
     * 目标分类编号
     */
    @ApiModelProperty("目标分类编号")
    private String targetCategoryNumber;

    /**
     * 目标分类名称
     */
    @ApiModelProperty("目标分类名称")
    private String targetCategoryName;

    /**
     * 目标分类简介
     */
    @ApiModelProperty("目标分类简介")
    private String targetCategoryDescribe;

    /**
     * 目标分类备注
     */
    @ApiModelProperty("目标分类备注")
    private String targetCategoryRemarks;

    /**
     * 目标分类是否末级 TRUE:是 FALSE:否
     */
    @ApiModelProperty("目标分类是否末级")
    private String isLast;

    /**
     * 冗余一级目标分类ID
     */
    @ApiModelProperty("冗余一级目标分类ID")
    private String rootTargetCategoryId;

    /**
     * 冗余目标ID
     */
    @ApiModelProperty("冗余目标ID")
    private String targetId;

    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 层级
     */
    @ApiModelProperty("层级")
    private Long levelNumber;

    /**
     * 展示状态 OT_ARRANGE:未安排 IN_ARRANGEMENT:安排中 HAVE_ARRANGE:已安排 NOT_AT_THE:未开始 ONGOING:进行中 STAGES_COMPLETE:阶段完成 COMPLETE:全部完成
     */
    @ApiModelProperty("展示状态")
    private String displayStatus;

    /**
     * 是否已完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否已完成")
    private String isComplete;

    /**
     * 是否本级完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否本级完成")
    private String currentLevelComplete;

    /**
     * 是否下级完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否下级完成")
    private String nextLevelComplete;

    /**
     * 虚拟组织下部门ID
     */
    @ApiModelProperty("牵头部门ID")
    private String deptId;

    /**
     * 组织内部门身份名称
     */
    @ApiModelProperty("牵头部门身份")
    private String virtualOrgDeptStatus;

    /**
     * 责任人个人账号ID
     */
    @ApiModelProperty("责任人个人账号ID")
    private String personLiableUserId;

    /**
     * 责任人职务名称
     */
    @ApiModelProperty("责任人职务名称")
    private String personLiableName;

    /**
     * 分管领导个人账号ID
     */
    @ApiModelProperty("分管领导个人账号ID")
    private String deptLeaderUserId;

    /**
     * 分管领导职务名称
     */
    @ApiModelProperty("分管领导职务名称")
    private String deptLeaderPostName;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;

    /**
     * 归属父级目标分类名称
     */
    @ApiModelProperty("归属父级目标分类名称")
    private String parentTargetCategoryName;

    /**
     * 权重分值
     */
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 权重
     */
    @ApiModelProperty("权重")
    private Double weightValue;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Long orderNumber;

    /**
     * 部门排序
     */
    @ApiModelProperty("部门排序")
    private Long dutyBodyOrderNum;

    /**
     * 个人排序
     */
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 权重排序
     */
    @ApiModelProperty("权重排序")
    private Long weightOrderNumber;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 操作时间
     */
    @ApiModelProperty("操作时间")
    private Date operateTime;

    /**
     * 是否开启预算 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启预算")
    private String isUseBudget;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        SetConstructionTaskDto that = (SetConstructionTaskDto) o;
        return (
                targetCategoryId == that.targetCategoryId &&
                        parentTtargetCategoryId == that.parentTtargetCategoryId &&
                        targetCategoryCode == that.targetCategoryCode &&
                        targetCategoryNumber == that.targetCategoryNumber &&
                        targetCategoryName == that.targetCategoryName &&
                        targetCategoryDescribe == that.targetCategoryDescribe &&
                        targetCategoryRemarks == that.targetCategoryRemarks &&
                        isLast == that.isLast &&
                        rootTargetCategoryId == that.rootTargetCategoryId &&
                        targetId == that.targetId &&
                        periodicModeTypeCode == that.periodicModeTypeCode &&
                        levelNumber == that.levelNumber &&
                        displayStatus == that.displayStatus &&
                        isComplete == that.isComplete &&
                        currentLevelComplete == that.currentLevelComplete &&
                        nextLevelComplete == that.nextLevelComplete &&
                        deptId == that.deptId &&
                        virtualOrgDeptStatus == that.virtualOrgDeptStatus &&
                        personLiableUserId == that.personLiableUserId &&
                        personLiableName == that.personLiableName &&
                        deptLeaderUserId == that.deptLeaderUserId &&
                        deptLeaderPostName == that.deptLeaderPostName &&
                        subjectLifeCycle == that.subjectLifeCycle &&
                        parentTargetCategoryName == that.parentTargetCategoryName &&
                        weightScore == that.weightScore &&
                        weightValue == that.weightValue &&
                        orderNumber == that.orderNumber &&
                        dutyBodyOrderNum == that.dutyBodyOrderNum &&
                        personalOrderNumber == that.personalOrderNumber &&
                        weightOrderNumber == that.weightOrderNumber &&
                        createTime == that.createTime &&
                        operateTime == that.operateTime &&
                        isUseBudget == that.isUseBudget
        );
    }

    @Override
    public int hashCode() {
        return Objects.hash(
                super.hashCode(),
                targetCategoryId,
                parentTtargetCategoryId,
                targetCategoryCode,
                targetCategoryNumber,
                targetCategoryName,
                targetCategoryDescribe,
                targetCategoryRemarks,
                isLast,
                rootTargetCategoryId,
                targetId,
                periodicModeTypeCode,
                levelNumber,
                displayStatus,
                isComplete,
                currentLevelComplete,
                nextLevelComplete,
                deptId,
                virtualOrgDeptStatus,
                personLiableUserId,
                personLiableName,
                deptLeaderUserId,
                deptLeaderPostName,
                subjectLifeCycle,
                parentTargetCategoryName,
                weightScore,
                weightValue,
                orderNumber,
                dutyBodyOrderNum,
                personalOrderNumber,
                weightOrderNumber,
                createTime,
                operateTime,
                isUseBudget
        );
    }

}
